/*
 * via_ingreso_rolAction.java
 * 
 * Generado Automaticamente .
 * Ing. Luis Miguel Hernández Pérez
 */
package healthmanager.controller;

import healthmanager.exception.HealthmanagerException;
import healthmanager.modelo.bean.Via_ingreso_rol;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Image;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;

import com.framework.util.FormularioUtil;
import com.framework.util.MensajesUtil;
import com.framework.util.Utilidades;
import healthmanager.modelo.service.GeneralExtraService;

public class Via_ingreso_rolAction extends ZKWindow {

//	private static Logger log = Logger.getLogger(Via_ingreso_rolAction.class);
    private GeneralExtraService generalExtraService;

    //Componentes //
    @View
    private Listbox lbxParameter;
    @View
    private Textbox tbxValue;
    @View
    private Textbox tbxAccion;
    @View
    private Borderlayout groupboxEditar;
    @View
    private Groupbox groupboxConsulta;
    @View
    private Rows rowsResultado;
    @View
    private Grid gridResultado;

    @View
    private Listbox lbxCodigo_rol;
    @View
    private Listbox lbxCodigo_via_ingreso;
    private final String[] idsExcluyentes = {};

    @Override
    public void init() {
        listarCombos();
    }

    public void listarCombos() {
        listarParameter();
        Utilidades.listarElementoListbox(lbxCodigo_rol, true, getServiceLocator());
        Utilidades.listarElementoListbox(lbxCodigo_via_ingreso, true, getServiceLocator());
    }

    public void listarParameter() {
        lbxParameter.getChildren().clear();

        Listitem listitem = new Listitem();
        listitem.setValue("codigo_rol");
        listitem.setLabel("Codigo_rol");
        lbxParameter.appendChild(listitem);

        listitem = new Listitem();
        listitem.setValue("codigo_via_ingreso");
        listitem.setLabel("Codigo_via_ingreso");
        lbxParameter.appendChild(listitem);

        if (lbxParameter.getItemCount() > 0) {
            lbxParameter.setSelectedIndex(0);
        }
    }

    //Accion del formulario si es nuevo o consultar //
    public void accionForm(boolean sw, String accion) throws Exception {
        groupboxConsulta.setVisible(!sw);
        groupboxEditar.setVisible(sw);

        if (!accion.equalsIgnoreCase("registrar")) {
            buscarDatos();
        } else {
            //buscarDatos();
            limpiarDatos();
        }
        tbxAccion.setValue(accion);
    }

    // Limpiamos los campos del formulario //
    public void limpiarDatos() throws Exception {
        FormularioUtil.limpiarComponentes(groupboxEditar, idsExcluyentes);
    }

    //Metodo para validar campos del formulario //
    public boolean validarForm() throws Exception {

        lbxCodigo_rol.setStyle("background-color:white");
        lbxCodigo_via_ingreso.setStyle("background-color:white");

        boolean valida = true;

        if (lbxCodigo_rol.getSelectedItem().getValue().toString().trim().equals("")) {
            lbxCodigo_rol.setStyle("background-color:#F6BBBE");
            valida = false;
        }
        if (lbxCodigo_via_ingreso.getSelectedItem().getValue().toString().trim().equals("")) {
            lbxCodigo_via_ingreso.setStyle("background-color:#F6BBBE");
            valida = false;
        }

        if (!valida) {
            MensajesUtil.mensajeAlerta(usuarios.getNombres() + " recuerde que...", "Los campos marcados con (*) son obligatorios");
        }

        return valida;
    }

    //Metodo para buscar //
    public void buscarDatos() throws Exception {
        try {
            String parameter = lbxParameter.getSelectedItem().getValue().toString();
            String value = tbxValue.getValue().toUpperCase().trim();

            Map<String, Object> parameters = new HashMap<String, Object>();
            parameters.put("parameter", parameter);
            parameters.put("value", "%" + value + "%");

            parameters.put("codigo_empresa", codigo_empresa);

            parameters.put("limite_paginado", "limit 25 offset 0");

            List<Via_ingreso_rol> lista_datos = generalExtraService.listar(Via_ingreso_rol.class, parameters);
            rowsResultado.getChildren().clear();

            for (Via_ingreso_rol via_ingreso_rol : lista_datos) {
                rowsResultado.appendChild(crearFilas(via_ingreso_rol, this));
            }

            gridResultado.setVisible(true);
            gridResultado.setMold("paging");
            gridResultado.setPageSize(20);

            gridResultado.applyProperties();
            gridResultado.invalidate();

        } catch (Exception e) {
            MensajesUtil.mensajeError(e, "", this);
        }
    }

    public Row crearFilas(Object objeto, Component componente) throws Exception {
        Row fila = new Row();

        final Via_ingreso_rol via_ingreso_rol = (Via_ingreso_rol) objeto;

        Hbox hbox = new Hbox();
        Space space = new Space();

        fila.setStyle("text-align: justify;nowrap:nowrap");

        hbox.appendChild(space);

        Image img = new Image();
        img.setSrc("/images/editar.gif");
        img.setTooltiptext("Editar");
        img.setStyle("cursor: pointer");
        img.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
            @Override
            public void onEvent(Event arg0) throws Exception {
                mostrarDatos(via_ingreso_rol);
            }
        });
        hbox.appendChild(img);

        img = new Image();
        img.setSrc("/images/borrar.gif");
        img.setTooltiptext("Eliminar");
        img.setStyle("cursor: pointer");
        img.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
            @Override
            public void onEvent(Event arg0) throws Exception {
                Messagebox.show("Esta seguro que desea eliminar este registro? ",
                        "Eliminar Registro", Messagebox.YES + Messagebox.NO,
                        Messagebox.QUESTION,
                        new org.zkoss.zk.ui.event.EventListener<Event>() {
                            public void onEvent(Event event) throws Exception {
                                if ("onYes".equals(event.getName())) {
                                    // do the thing
                                    eliminarDatos(via_ingreso_rol);
                                    buscarDatos();
                                }
                            }
                        });
            }
        });
        hbox.appendChild(space);
        hbox.appendChild(img);

        fila.appendChild(hbox);

        return fila;
    }

    //Metodo para guardar la informacion //
    public void guardarDatos() throws Exception {
        try {
            FormularioUtil.setUpperCase(groupboxEditar);
            if (validarForm()) {
				//Cargamos los componentes //

                Via_ingreso_rol via_ingreso_rol = new Via_ingreso_rol();
                via_ingreso_rol.setCodigo_rol(lbxCodigo_rol.getSelectedItem().getValue().toString());
                via_ingreso_rol.setCodigo_via_ingreso(lbxCodigo_via_ingreso.getSelectedItem().getValue().toString());
                via_ingreso_rol.setCodigo_empresa(codigo_empresa);

                if (tbxAccion.getText().equalsIgnoreCase("registrar")) {
                    generalExtraService.crear(via_ingreso_rol);
                    accionForm(true, "registrar");
                } else {
                    int result = generalExtraService.actualizar(via_ingreso_rol);
                    if (result == 0) {
                        throw new Exception("Lo sentimos pero los datos a modificar no se encuentran en base de datos");
                    }
                }

                MensajesUtil.mensajeInformacion("Informacion ..", "Los datos se guardaron satisfactoriamente");
            }

        } catch (Exception e) {
            MensajesUtil.mensajeError(e, "", this);
        }

    }

    //Metodo para colocar los datos del objeto que se consulta en la vista //
    public void mostrarDatos(Object obj) throws Exception {
        Via_ingreso_rol via_ingreso_rol = (Via_ingreso_rol) obj;
        try {
            for (int i = 0; i < lbxCodigo_rol.getItemCount(); i++) {
                Listitem listitem = lbxCodigo_rol.getItemAtIndex(i);
                if (listitem.getValue().toString().equals(via_ingreso_rol.getCodigo_rol())) {
                    listitem.setSelected(true);
                    i = lbxCodigo_rol.getItemCount();
                }
            }
            for (int i = 0; i < lbxCodigo_via_ingreso.getItemCount(); i++) {
                Listitem listitem = lbxCodigo_via_ingreso.getItemAtIndex(i);
                if (listitem.getValue().toString().equals(via_ingreso_rol.getCodigo_via_ingreso())) {
                    listitem.setSelected(true);
                    i = lbxCodigo_via_ingreso.getItemCount();
                }
            }

            //Mostramos la vista //
            tbxAccion.setText("modificar");
            accionForm(true, tbxAccion.getText());
        } catch (Exception e) {
            MensajesUtil.mensajeError(e, "", this);
        }
    }

    public void eliminarDatos(Object obj) throws Exception {
        Via_ingreso_rol via_ingreso_rol = (Via_ingreso_rol) obj;
        try {
            int result = generalExtraService.eliminar(via_ingreso_rol);
            if (result == 0) {
                throw new Exception("Lo sentimos pero los datos a eliminar no se encuentran en base de datos");
            }

            Messagebox.show("Informacion se eliminó satisfactoriamente !!",
                    "Information", Messagebox.OK, Messagebox.INFORMATION);
        } catch (HealthmanagerException e) {
            MensajesUtil.mensajeError(e, "Este objeto no se puede eliminar por que esta relacionado con otra tabla en la base de datos", this);
        } catch (RuntimeException r) {
            MensajesUtil.mensajeError(r, "", this);
        }
    }
}
